/**
 * 本地存储工具
 */

interface StorageData {
  value: any
  expire?: number
}

/**
 * 设置本地存储
 * @param key 键
 * @param value 值
 * @param expire 过期时间（秒），不传则永久有效
 */
export function setStorage(key: string, value: any, expire?: number): void {
  const data: StorageData = {
    value
  }
  
  if (expire) {
    data.expire = Date.now() + expire * 1000
  }
  
  localStorage.setItem(key, JSON.stringify(data))
}

/**
 * 获取本地存储
 * @param key 键
 * @returns 值，如果不存在或已过期则返回 null
 */
export function getStorage<T = any>(key: string): T | null {
  const item = localStorage.getItem(key)
  
  if (!item) {
    return null
  }
  
  try {
    const data: StorageData = JSON.parse(item)
    
    // 检查是否过期
    if (data.expire && Date.now() > data.expire) {
      localStorage.removeItem(key)
      return null
    }
    
    return data.value as T
  } catch (error) {
    console.error('解析存储数据失败:', error)
    return null
  }
}

/**
 * 移除本地存储
 * @param key 键
 */
export function removeStorage(key: string): void {
  localStorage.removeItem(key)
}

/**
 * 清空本地存储
 */
export function clearStorage(): void {
  localStorage.clear()
}

/**
 * 会话存储操作（类似上面的方法，但使用 sessionStorage）
 */
export const sessionStorage = {
  set(key: string, value: any): void {
    window.sessionStorage.setItem(key, JSON.stringify(value))
  },
  
  get<T = any>(key: string): T | null {
    const item = window.sessionStorage.getItem(key)
    if (!item) return null
    
    try {
      return JSON.parse(item) as T
    } catch (error) {
      console.error('解析会话数据失败:', error)
      return null
    }
  },
  
  remove(key: string): void {
    window.sessionStorage.removeItem(key)
  },
  
  clear(): void {
    window.sessionStorage.clear()
  }
}

